home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
001-025
/
scopedisk8
/
superlib
/
libsrc
/
bset.asm
< prev
next >
Wrap
Assembly Source File
|
1995-03-18
|
997b
|
47 lines
;BSET.ASM
;BZERO.ASM
;
; Uses longword operations if data is aligned on a longword boundry
; and the size is a mulitple of 4. Otherwise, uses byte operations.
xdef _bset
xdef _bzero
_bzero
clr.lD1
brabegin
_bset
move.b15(A7),D1;12(A7)-> msb . . lsb(D1 = data)
begin
move.l4(A7),A0;A0 = address
move.l8(A7),D0;D0 = byte count
andi.b#3,11(A7);byte count on long word boundry?
bnedrop
andi.b#3,7(A7);address on longword boundry?
bnedrop
bralwb
loopmove.bD1,(A0)+;BYTE SET LOOP
dropdbf.wD0,loop ;remember, only effects lower word
sub.l#$10000,D0;for buffers >65535
bplloop;branch to loop because D0.W now is FFFF
rts
lwblsr.l#2,D0;byte count / 4 (longword chunks)
tst.lD1;BZERO
beqdropl
move.bD1,14(A7);15(A7) already contains the byte
move.w14(A7),D1;D1 0..15 set
swapD1
move.w14(A7),D1;D1 16..31 set
bradropl
looplmove.lD1,(A0)+;BYTE SET LOOP
dropldbf.wD0,loopl;remember, only effects lower word
sub.l#$10000,D0;for buffers >65535
bplloopl;branch to loop because D0.W now is FFFF
rts